浅谈白名单保护的绕过与反绕过
在谈白名单的绕过与反绕过之前,我们首先回顾一下工控系统“白环境”的理念:
只有可信任的设备,才能接入控制网络;只有可信任的消息,才能在网络上传输;只有可信任的软件,才允许被执行。
可信任的设备,与可信任的消息,其判别方法与防护策略,将在其它文中叙述,本文暂不涉及。本文将与读者一同探讨可信任的软件的问题,也就是软件环境的白名单实现方案,以及该白名单方案当前面临的挑战与应对方案。
在工业控制系统网络安全实践中,由于受保护系统软件和设备更新频率低,进程,通讯和数据相对单一、稳定,加之工控系统对业务的可靠性,连续性有严格要求,因此白名单不失为一种行之有效的保护方案。
所谓软件白名单,也就是只有可信任的软件,才允许被运行。软件白名单保护的通常做法有两种,一是计算目标程序的哈希,再与维护的白名单特征库作比对,作为控制软件执行的基本判别式。二是维护可信任发行厂商的证书链,通过校验软件签名决定是否允许软件执行。
白名单策略的经典案例就是苹果iOS,苹果公司的AppStore就是其白名单库,苹果公司用相对较高的成本,自行维护更新App Store这个大白名单,从而天然地解决了一大票安卓环境下常遇到的各种安全问题。近年来,许多安卓手机厂商也在推动自己的安卓市场和白名单建立工作。
我们回归windows平台环境,令软件白名单保护失效的方法有很多,粗略说来有以下几种:
1. 白名单污染
白名单污染是针对白名单数据库的攻击,也就是说,将恶意软件的签名或者哈希混入白名单软件的数据库。
2. 暴力破解
暴力破解白名单软件的防护,包括停止白名单软件,控制网络白名单软件的管理设备,或者欺骗白名单软件,通过某些技巧绕过可执行文件加载过程中的哈希或签名计算。
3. 白名单绕过
利用已在白名单中的软件执行目标代码,甚至发动无文件攻击。
白名单数据库是白名单软件的核心,必须具备最全面的保护。著名的白名单软件Bit9,就曾经发生过核心数据库被污染的事件。据说Bit9维护着全球最大型的软件哈希数据库,数据规模达到百亿级别,并且动态定期更新,还作为云服务提供给众多世界级安全厂商。但是2013年,Bit9的白名单遭到了恶意攻击者的破坏,攻击者获取了Bit9的签名证书,并将恶意程序签名后加入Bit9的白名单。造成了严重的后果。
这种攻击方式实际是发生在白名单软件的安装之前,那么如果面对的是已经安装完毕的白名单防护软件,攻击者能做些什么呢?
白名单软件必须具备对自身的强大保护能力,避免被攻击者攻击导致保护失效。实际上这是众多安全软件普遍面临的一个问题。几乎所有的杀毒软件,IPS,IDS,主机防火墙,都被要求对自身有强大的保护能力。自我保护主要的方案包括注册服务,注册驱动,多进程相互守护等。这也是一个很深入的课题,不在本文赘述。
针对保护软件的另一攻击思路是欺骗其验证过程,这种思路并不通用,主要依赖白名单软件的实现逻辑。比如文件的二次读取,加载和验证并非同一次读取文件内容。攻击者可以用白名单内的可执行文件内容,临时替换验证过程。
针对例举的威胁,解决方案就是,将验证和加载统一起来,读取一次并锁定所读可执行文件内容的buffer。
前面的两种方式,并不具有典型性,真正意义上的与白名单安全软件的对抗实践,主要思路都放在了白名单绕过上,最常见的白名单绕过思路,是从白名单列表中选择一个宿主,利用白名单软件的合法性,代为执行恶意代码。
以最常见的上位机操作系统Windows为例,我们知道在windows操作系统中执行一项任务,启动一个全新进程只是最常规的方法。除了启动进程,还有许多其它执行方法,包括启动服务,注入远程线程,RPC,启动各种语言的脚本,甚至许多工控软件的编程软件和组态软件。如果白名单只针对进程的exe,dll和bat等进行防护,显然是不够的。
以PowerShell为例,目前流行的一些无文件绕过白名单技术,经常采用PowerShell作为进程载体。
用PowerShell执行恶意代码
PowerShell的脚本扩展名为ps1,但是单纯地将ps1文件格式纳入白名单的过滤项是远远不够的,因为PowerShell完全可以读取任意一段文本,并加载入内存,解码成为shellcode并执行。这段文本可能来自网络CC,来自溢出数据等等。也就是一般意义上我们说的无文件执行攻击。
有兴趣的朋友可以关注开源的PowerSploit,提供了多种内网渗透的姿势,其中就有几种通过注入进程绕过白名单的方法。
PowerShell的强大之处还在于,即使微软自己也不能幸免。根据最新消息,微软自己的白名单WDAC,也存在一个借助PowerShell本地绕过白名单控制的漏洞,这个漏洞(CVE-2019-1167)刚刚于2019年7月16日被微软官方修补好。
因为以上种种原因,我们需要将PowerShell剔除出白名单。
接下来,我们知道PowerShell实际上是c#的一个高级接口,单纯控制PowerShell.exe并不能完全阻止入侵者获得一个PowerShell执行环境。入侵者完全可以把dll注入到其它进程来获取PowerShell,基于这种考虑,我们务必把PowerShell必须的几个dll,也剔除出白名单,例如:Microsoft.PowerShell.Commands.Utility.ni.dll
以下是一个注入到spoolsv.exe获取PowerShell执行权限的实例。
PowerShell只是无文件攻击常用的介质,但并非唯一选择。无文件攻击还可以借助常用软件,例如浏览器,PDF阅读器等的漏洞,将shellcode驻留在内存当中。在工控生产环境中,我们还务必关注工控编程和组态软件的漏洞情况。
无文件攻击的劣势在于需要直接将shellcode注入内存,难以驻留,一旦系统重新启动就失去了活性。但其优势在于很容易就可以突破软件白名单的保护。而不轻易重新启动却恰恰是工业控制领域设备的特性之一,所以无文件攻击特别适合用来针对工控系统进行攻击。也是白名单保护最需要解决的重要问题之一。
为了阻止白名单的绕过,我们必须明确工业现场的需求,压缩白名单到最小可用状态。将PowerShell和类似的其它若干可执行程序以及相关的dll文件剔除出白名单,最大努力避免给白名单绕过攻击者以可乘之机。
白名单的绕过与反绕过是一个长期以来一直讨论的话题,威努特在构建工控白环境的长期实践中,积累了丰富的经验,并将这些经验应用在主机保护产品当中,为客户的工业生产环境保驾护航。
北京威努特技术有限公司(以下简称“威努特”),成立于2014年,是国内专注于工控安全领域的国家高新技术企业,全球仅六家荣获国际自动化协会安全合规学会安全认证的企业之一。
威努特以率先独创的“白环境”整体解决方案为核心,研发了覆盖工控网络安全的5大类20款自主可控产品,拥有领先的核心技术及市场优势,成功为电力、轨道交通、烟草、石油石化、市政、智能制造、冶金及军工等国家重点行业五百余家客户提供了全面有效的安全保障,多次受邀为中共十九大、两会、“一带一路”、G20等重大活动进行网络安保工作,广泛参与工控安全领域的国家和行业标准制定,得到了国家多个政府部门和客户的高度认可。
威努特始终以保护我国关键信息基础设施网络空间安全为己任,为建设网络强国添砖加瓦!
渠道合作咨询 赵女士 18611234765
稿件合作 微信:Luo_xiaoran